package ct.labuladong.linkList;

import algorithm.common.ListNode;

/**
 * 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
 */
public class MergeTwoLists {
    public static void main(String[] args) {
        ListNode p1 = new ListNode(1);
        p1.next = new ListNode(2);
        p1.next.next = new ListNode(4);

        ListNode p2 = new ListNode(1);
        p2.next = new ListNode(3);
        p2.next.next = new ListNode(4);

        ListNode listNode = mergeTwoLists(p1, p2);
        print(listNode);
    }

    public static ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode cur1 = list1;
        ListNode cur2 = list2;
        ListNode newNode = new ListNode(-1);
        ListNode p = newNode;
        while (cur1 != null && cur2 != null) {
            if (cur1.val < cur2.val) {
                p.next = cur1;
                cur1 = cur1.next;
            } else {
                p.next = cur2;
                cur2 = cur2.next;
            }
            p = p.next;
        }
        if (cur1 != null) {
            p.next = cur1;
        }
        if (cur2 != null) {
            p.next = cur2;
        }
        return newNode.next;
    }

    public static void print(ListNode listNode) {
        while (listNode != null) {
            System.out.println(listNode.val);
            listNode = listNode.next;
        }
    }
}
